package com.jacky.贪心;

public class 分发糖果_135 {

    public int candy(int[] ratings) {
        //如果表示一排孩子的成绩数组为空，或者为0，直接返回0
        if (ratings == null || ratings.length == 0) return 0;
        //定义一个数组，存储每个孩子分到的糖果数
        int[] candies = new int[ratings.length];
        //获得数组长度
        int length = ratings.length;
        //第一次遍历给每个孩子都分一个糖果
        for (int i = 0; i < length; i++) {
            candies[i] = 1;
        }
        //第二次从左到右遍历，如果右边孩子成绩比左边孩子高，那右边孩子糖果=左边孩子糖果数+1
        for (int i = 1; i < length; i++) {
            if (ratings[i] > ratings[i - 1]) {
                candies[i] = candies[i - 1] + 1;
            }
        }
        //第二次从右到左遍历，如果左边孩子成绩比右边孩子高，那左边孩子糖果=右边孩子糖果数+1
        for (int i = length - 2; i >= 0; i--) {
            if (ratings[i] > ratings[i + 1]) {
                //因为相邻的孩子之间，评分更高的孩子获得糖果更多，同时满足左右两边，所以糖果数要取较大的值
                candies[i] = Math.max(candies[i], candies[i + 1] + 1);
            }
        }
        //计算分发给孩子总的糖果数
        int res = 0;
        for (int i = 0; i < candies.length; i++) {
            res += candies[i];
        }
        return res;
    }
}
